{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "484ea324",
   "metadata": {},
   "source": [
    "\n",
    "\n",
    "### $\\text{Riemann-Liouvile}$ 型分数阶微积分\n",
    "\n",
    "$$\n",
    "\\large \\begin{aligned}\n",
    "&&&&&&\\\\\n",
    "\\text{左R-L型分数阶积分:}\\\\\n",
    "\\sideset{_a}{_t^{-\\mu}}D u(t) &= \\frac{1}{\\Gamma(\\mu)}\\int_a^t (t-\\tau)^{\\mu-1}u(\\tau) d\\tau. \\\\\n",
    "\\text{左R-L型分数阶导数:}\\\\\n",
    "\\sideset{_a}{_t^{\\mu}}D u(t) &= D^n[\\sideset{_a}{_t^{-(n-\\mu)}}D u(t)]  \\\\\n",
    "&= \\frac{(-1)^n}{\\Gamma(n-\\mu)} \\frac{d^n}{dt^n}\\left( \\int_a^t (\\tau-t)^{n-\\mu-1}u(\\tau) d\\tau \\right). \\\\\n",
    "\\text{右R-L型分数阶积分:}\\\\\n",
    "\\sideset{_t}{_b^{-\\mu}}D u(t) &= \\frac{1}{\\Gamma(\\mu)}\\int_t^b (\\tau-t)^{\\mu-1}u(\\tau) d\\tau. \\\\\n",
    "\\text{右R-L型分数阶导数:}\\\\\n",
    "\\sideset{_t}{_b^{\\mu}}D u(t) &= (-D)^n[\\sideset{_t}{_b^{\\mu-n}}D u(t)]  \\\\\n",
    "&= \\frac{(-1)^n}{\\Gamma(n-\\mu)} \\frac{d^n}{dt^n}\\left( \\int_t^b (\\tau-t)^{n-\\mu-1}u(\\tau) d\\tau \\right). \\\\\n",
    "其中\\mu>0, n=\\lceil \\mu & \\rceil, t\\in(a,b). \\\\\n",
    "\\end{aligned}\\\\\n",
    "$$\n",
    "\n",
    "R-L型对G-L定义进行了改进，是G-L型的扩充。R-L型可以简化分数阶微积分的计算过程，是应用较为广泛的一种。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d457a7b9",
   "metadata": {},
   "source": [
    "\n",
    "## Fractional advection-diffusion equations(fractional ADE)\n",
    "\n",
    "\n",
    "来自论文：https://epubs.siam.org/doi/epdf/10.1137/18M1229845\n",
    "\n",
    "分数阶对流扩散方程\n",
    "\n",
    "$$\n",
    "\\large\n",
    "\\begin{aligned}\n",
    "\\frac{\\partial^{\\gamma} u(\\boldsymbol{x},t)}{\\partial t^{\\gamma}} &= -c(-\\Delta)^{\\alpha/2} u(\\boldsymbol{x},t) - \\boldsymbol{v}\\cdot \\nabla u(\\boldsymbol{x},t) + f_{BB}(\\boldsymbol{x},t), \\boldsymbol{x}\\in\\Omega \\subset \\mathbb{R}^D,t\\in(0,T],\\\\\n",
    "u(\\boldsymbol{x},t) &= 0, \\boldsymbol{x}\\in \\partial \\Omega,\\\\\n",
    "u(\\boldsymbol{x},0) &= g(x), \\boldsymbol{x}\\in \\Omega.\\\\\n",
    "\\end{aligned}\n",
    "\\tag{2.1}\n",
    "$$\n",
    "也假设解 $u(\\boldsymbol{x},t)$ 在 $\\Omega$ 的外部为零。上述方程的左侧是伽马阶的时间分数导数，它是在Caputo意义下定义的。\n",
    "$$\n",
    "\\large \n",
    "\\frac{\\partial^{\\gamma} u(\\boldsymbol{x},t)}{\\partial t^{\\gamma}}\n",
    "=\\frac{1}{\\Gamma(1-\\gamma)} \\int_0^t (t-\\tau)^{-\\gamma} \\frac{\\partial u(\\boldsymbol{x},t)}{\\partial t}d\\tau , 0<\\gamma<1, \\\\\n",
    "$$\n",
    "其中 $\\Gamma(\\cdot)$ 是Gamma函数。当 $\\gamma\\rightarrow 1$ 时，时间--分数阶导数还原为一阶导数。右侧的第一项是分数拉普拉斯，它是在方向导数的意义上定义的。\n",
    "$$\n",
    "\\large \n",
    "(-\\Delta)^{\\alpha/2} u(\\boldsymbol{x},t) = \\frac{\\Gamma(\\frac{1-\\alpha}{2})\\Gamma(\\frac{D+\\alpha}{2})}{2\\pi^{\\frac{D+1}{2}}} \\int_{||\\boldsymbol{\\theta}||_2=1} D_{\\boldsymbol{\\theta}}^{\\alpha} u(\\boldsymbol{x},t) d\\boldsymbol{\\theta}, \\boldsymbol{\\theta} \\in \\mathbb{R}^D, 1<\\alpha<2,\\\\\n",
    "$$\n",
    "其中$|| \\cdot ||_2$是向量的L2范数。$D_{\\boldsymbol{\\theta}}^{\\alpha}$表示方向分数微分算子，其中$\\boldsymbol{\\theta}$是微分方向向量。第3.3节将给出该运算符及其离散化的视图。正如α向右箭头2所示，分数拉普拉斯阶（2.3）减少到标准拉普拉斯阶“$-\\Delta$”。在问题（2.1）中，$\\boldsymbol{v}$是平均流速，$f_{BB}$是BB强迫项，其值仅在分散的时空坐标中已知。在考虑地下水污染物迁移中的应用时，分数阶γ和α分别限制为（0,1）和（1,2）。此外，为了简单起见，我们考虑零边界条件。\n",
    "\n",
    "前面的问题公式如下：给定分数阶α和γ、扩散系数c、流速$\\boldsymbol{v}$、BB强迫项$f_{BB}$以及初始和边界条件，我们解决了浓度场$u(\\boldsymbol{x},t)$的问题（2.1）。另一方面，反问题定义如下：给定初始边界条件、BB强迫项$f_{BB}$和最终时间$u(\\boldsymbol{x},t) = h_{BB}(\\boldsymbol{x}, T)$的额外浓度测量，我们解决了分数阶α和γ、扩散系数c、流速$\\boldsymbol{v}$和浓度场$u(\\boldsymbol{x},t)$的问题（2.1）。我们也可以在时间上考虑分散的测量，但在这里，我们调查的是一个更具挑战性的案例，在最后阶段只有可用的数据。\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d8ff2315",
   "metadata": {},
   "source": [
    "1维分数阶对流扩散方程正问题：\n",
    "\n",
    "\n",
    "代码来源：\n",
    "https://github.com/lululxvi/deepxde/blob/master/examples/pinn_forward/fractional_Poisson_1d.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "706712c5",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using backend: tensorflow.compat.v1\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From G:\\Anaconda3\\envs\\py3.8\\lib\\site-packages\\tensorflow\\python\\compat\\v2_compat.py:101: disable_resource_variables (from tensorflow.python.ops.variable_scope) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "non-resource variables are not supported in the long term\n",
      "WARNING:tensorflow:From G:\\Anaconda3\\envs\\py3.8\\lib\\site-packages\\deepxde\\nn\\initializers.py:118: The name tf.keras.initializers.he_normal is deprecated. Please use tf.compat.v1.keras.initializers.he_normal instead.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "\"\"\"Backend supported: tensorflow.compat.v1\"\"\"\n",
    "import deepxde as dde\n",
    "import numpy as np\n",
    "from deepxde.backend import tf\n",
    "from scipy.special import gamma"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "75fff251",
   "metadata": {},
   "source": [
    "$$\\large (D_{0+}^{\\alpha} + D_{1-}^{\\alpha}) u(x) = f(x)$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c7fc9eb4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Compiling model...\n",
      "Building feed-forward neural network...\n",
      "'build' took 0.069716 s\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "G:\\Anaconda3\\envs\\py3.8\\lib\\site-packages\\keras\\legacy_tf_layers\\core.py:236: UserWarning: `tf.layers.dense` is deprecated and will be removed in a future version. Please use `tf.keras.layers.Dense` instead.\n",
      "  warnings.warn('`tf.layers.dense` is deprecated and '\n",
      "G:\\Anaconda3\\envs\\py3.8\\lib\\site-packages\\keras\\engine\\base_layer_v1.py:1676: UserWarning: `layer.apply` is deprecated and will be removed in a future version. Please use `layer.__call__` method instead.\n",
      "  warnings.warn('`layer.apply` is deprecated and '\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "'compile' took 4.072178 s\n",
      "\n",
      "Initializing variables...\n",
      "Training model...\n",
      "\n",
      "Step      Train loss              Test loss               Test metric\n",
      "0         [1.74e-02, 0.00e+00]    [1.74e-02, 0.00e+00]    []  \n",
      "1000      [1.17e-04, 0.00e+00]    [1.17e-04, 0.00e+00]    []  \n",
      "2000      [3.20e-05, 0.00e+00]    [3.20e-05, 0.00e+00]    []  \n",
      "3000      [2.28e-05, 0.00e+00]    [2.28e-05, 0.00e+00]    []  \n",
      "4000      [1.35e-05, 0.00e+00]    [1.35e-05, 0.00e+00]    []  \n",
      "5000      [6.74e-06, 0.00e+00]    [6.74e-06, 0.00e+00]    []  \n",
      "6000      [3.88e-06, 0.00e+00]    [3.88e-06, 0.00e+00]    []  \n",
      "7000      [2.75e-06, 0.00e+00]    [2.75e-06, 0.00e+00]    []  \n",
      "8000      [2.17e-06, 0.00e+00]    [2.17e-06, 0.00e+00]    []  \n",
      "9000      [3.78e-06, 0.00e+00]    [3.78e-06, 0.00e+00]    []  \n",
      "10000     [2.79e-06, 0.00e+00]    [2.79e-06, 0.00e+00]    []  \n",
      "\n",
      "Best model at step 8000:\n",
      "  train loss: 2.17e-06\n",
      "  test loss: 2.17e-06\n",
      "  test metric: []\n",
      "\n",
      "'train' took 24.296941 s\n",
      "\n"
     ]
    }
   ],
   "source": [
    "alpha = 1.5\n",
    "\n",
    "\n",
    "def fpde(x, y, int_mat):\n",
    "    \"\"\"(D_{0+}^alpha + D_{1-}^alpha) u(x) = f(x)\"\"\"\n",
    "    if isinstance(int_mat, (list, tuple)) and len(int_mat) == 3:\n",
    "        int_mat = tf.SparseTensor(*int_mat)\n",
    "        lhs = tf.sparse_tensor_dense_matmul(int_mat, y)\n",
    "    else:\n",
    "        lhs = tf.matmul(int_mat, y)\n",
    "    rhs = (\n",
    "        gamma(4) / gamma(4 - alpha) * (x ** (3 - alpha) + (1 - x) ** (3 - alpha))\n",
    "        - 3 * gamma(5) / gamma(5 - alpha) * (x ** (4 - alpha) + (1 - x) ** (4 - alpha))\n",
    "        + 3 * gamma(6) / gamma(6 - alpha) * (x ** (5 - alpha) + (1 - x) ** (5 - alpha))\n",
    "        - gamma(7) / gamma(7 - alpha) * (x ** (6 - alpha) + (1 - x) ** (6 - alpha))\n",
    "    )\n",
    "    # lhs /= 2 * np.cos(alpha * np.pi / 2)\n",
    "    # rhs = gamma(alpha + 2) * x\n",
    "    return lhs - rhs[: tf.size(lhs)]\n",
    "\n",
    "\n",
    "def func(x):\n",
    "    # return x * (np.abs(1 - x**2)) ** (alpha / 2)\n",
    "    return x ** 3 * (1 - x) ** 3\n",
    "\n",
    "\n",
    "geom = dde.geometry.Interval(0, 1)\n",
    "bc = dde.icbc.DirichletBC(geom, func, lambda _, on_boundary: on_boundary)\n",
    "\n",
    "# Static auxiliary points\n",
    "data = dde.data.FPDE(geom, fpde, alpha, bc, [101], meshtype=\"static\", solution=func)\n",
    "# Dynamic auxiliary points\n",
    "# data = dde.data.FPDE(\n",
    "#     geom, fpde, alpha, bc, [100], meshtype=\"dynamic\", num_domain=20, num_boundary=2, solution=func, num_test=100\n",
    "# )\n",
    "\n",
    "net = dde.nn.FNN([1] + [20] * 4 + [1], \"tanh\", \"Glorot normal\")\n",
    "net.apply_output_transform(lambda x, y: x * (1 - x) * y)\n",
    "\n",
    "model = dde.Model(data, net)\n",
    "\n",
    "model.compile(\"adam\", lr=1e-3)\n",
    "losshistory, train_state = model.train(epochs=10000)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "4b983594",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "dde.saveplot(losshistory, train_state, issave=False, isplot=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d2b79d21",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "040f12d2",
   "metadata": {},
   "source": [
    "1维分数阶对流扩散方程反问题：\n",
    "\n",
    "\n",
    "代码来源：\n",
    "https://github.com/lululxvi/deepxde/blob/master/examples/pinn_inverse/fractional_Poisson_1d_inverse.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f250c0bd",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using backend: tensorflow.compat.v1\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From G:\\Anaconda3\\envs\\py3.8\\lib\\site-packages\\tensorflow\\python\\compat\\v2_compat.py:101: disable_resource_variables (from tensorflow.python.ops.variable_scope) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "non-resource variables are not supported in the long term\n",
      "WARNING:tensorflow:From G:\\Anaconda3\\envs\\py3.8\\lib\\site-packages\\deepxde\\nn\\initializers.py:118: The name tf.keras.initializers.he_normal is deprecated. Please use tf.compat.v1.keras.initializers.he_normal instead.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "\"\"\"Backend supported: tensorflow.compat.v1\"\"\"\n",
    "import deepxde as dde\n",
    "import numpy as np\n",
    "from deepxde.backend import tf\n",
    "from scipy.special import gamma"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "e5d9d227",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "G:\\Anaconda3\\envs\\py3.8\\lib\\site-packages\\skopt\\sampler\\sobol.py:246: UserWarning: The balance properties of Sobol' points require n to be a power of 2. 0 points have been previously generated, then: n=0+22=22. \n",
      "  warnings.warn(\"The balance properties of Sobol' points require \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Compiling model...\n",
      "Building feed-forward neural network...\n",
      "'build' took 0.061283 s\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "G:\\Anaconda3\\envs\\py3.8\\lib\\site-packages\\keras\\legacy_tf_layers\\core.py:236: UserWarning: `tf.layers.dense` is deprecated and will be removed in a future version. Please use `tf.keras.layers.Dense` instead.\n",
      "  warnings.warn('`tf.layers.dense` is deprecated and '\n",
      "G:\\Anaconda3\\envs\\py3.8\\lib\\site-packages\\keras\\engine\\base_layer_v1.py:1676: UserWarning: `layer.apply` is deprecated and will be removed in a future version. Please use `layer.__call__` method instead.\n",
      "  warnings.warn('`layer.apply` is deprecated and '\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Generating sparse fractional matrix...\n",
      "Generating sparse fractional matrix...\n",
      "'compile' took 12.852003 s\n",
      "\n",
      "Initializing variables...\n",
      "Training model...\n",
      "\n",
      "Step      Train loss              Test loss               Test metric\n",
      "0         [6.44e+00, 6.89e+00]    [6.81e+00, 0.00e+00]    []  \n",
      "0 [1.50e+00]\n",
      "1000      [3.75e-02, 5.57e-03]    [5.15e-01, 0.00e+00]    []  \n",
      "1000 [1.83e+00]\n",
      "2000      [1.35e-02, 9.50e-04]    [4.87e-01, 0.00e+00]    []  \n",
      "2000 [1.80e+00]\n",
      "3000      [2.34e-03, 3.49e-04]    [3.64e-01, 0.00e+00]    []  \n",
      "3000 [1.79e+00]\n",
      "4000      [3.92e-04, 3.01e-04]    [2.93e-01, 0.00e+00]    []  \n",
      "4000 [1.79e+00]\n",
      "5000      [2.21e-04, 2.09e-04]    [2.66e-01, 0.00e+00]    []  \n",
      "5000 [1.79e+00]\n",
      "6000      [1.44e-04, 1.40e-04]    [2.53e-01, 0.00e+00]    []  \n",
      "6000 [1.79e+00]\n",
      "7000      [8.72e-05, 1.83e-04]    [2.39e-01, 0.00e+00]    []  \n",
      "7000 [1.79e+00]\n",
      "8000      [6.08e-05, 1.33e-04]    [2.25e-01, 0.00e+00]    []  \n",
      "8000 [1.79e+00]\n",
      "9000      [8.10e-05, 1.26e-03]    [2.13e-01, 0.00e+00]    []  \n",
      "9000 [1.79e+00]\n",
      "10000     [4.51e-05, 1.08e-04]    [2.06e-01, 0.00e+00]    []  \n",
      "10000 [1.79e+00]\n",
      "\n",
      "Best model at step 10000:\n",
      "  train loss: 1.53e-04\n",
      "  test loss: 2.06e-01\n",
      "  test metric: []\n",
      "\n",
      "'train' took 733.806548 s\n",
      "\n"
     ]
    }
   ],
   "source": [
    "\n",
    "alpha0 = 1.8\n",
    "alpha = tf.Variable(1.5)\n",
    "\n",
    "\n",
    "def fpde(x, y, int_mat):\n",
    "    \"\"\"(D_{0+}^alpha + D_{1-}^alpha) u(x)\"\"\"\n",
    "    if isinstance(int_mat, (list, tuple)) and len(int_mat) == 3:\n",
    "        int_mat = tf.SparseTensor(*int_mat)\n",
    "        lhs = tf.sparse_tensor_dense_matmul(int_mat, y)\n",
    "    else:\n",
    "        lhs = tf.matmul(int_mat, y)\n",
    "    lhs /= 2 * tf.cos(alpha * np.pi / 2)\n",
    "    rhs = gamma(alpha0 + 2) * x\n",
    "    return lhs - rhs[: tf.size(lhs)]\n",
    "\n",
    "\n",
    "def func(x):\n",
    "    return x * (np.abs(1 - x ** 2)) ** (alpha0 / 2)\n",
    "\n",
    "\n",
    "geom = dde.geometry.Interval(-1, 1)\n",
    "\n",
    "observe_x = np.linspace(-1, 1, num=20)[:, None]\n",
    "observe_y = dde.icbc.PointSetBC(observe_x, func(observe_x))\n",
    "\n",
    "# Static auxiliary points\n",
    "# data = dde.data.FPDE(\n",
    "#     geom,\n",
    "#     fpde,\n",
    "#     alpha,\n",
    "#     observe_y,\n",
    "#     [101],\n",
    "#     meshtype=\"static\",\n",
    "#     anchors=observe_x,\n",
    "#     solution=func,\n",
    "# )\n",
    "# Dynamic auxiliary points\n",
    "data = dde.data.FPDE(\n",
    "    geom,\n",
    "    fpde,\n",
    "    alpha,\n",
    "    observe_y,\n",
    "    [100],\n",
    "    meshtype=\"dynamic\",\n",
    "    num_domain=20,\n",
    "    anchors=observe_x,\n",
    "    solution=func,\n",
    "    num_test=100,\n",
    ")\n",
    "\n",
    "net = dde.nn.FNN([1] + [20] * 4 + [1], \"tanh\", \"Glorot normal\")\n",
    "net.apply_output_transform(lambda x, y: (1 - x ** 2) * y)\n",
    "\n",
    "model = dde.Model(data, net)\n",
    "\n",
    "model.compile(\"adam\", lr=1e-3, loss_weights=[1, 100])\n",
    "variable = dde.callbacks.VariableValue(alpha, period=1000)\n",
    "losshistory, train_state = model.train(epochs=10000, callbacks=[variable])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "2f4d4934",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "dde.saveplot(losshistory, train_state, issave=False, isplot=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b6f302c8",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "py3.8",
   "language": "python",
   "name": "py3.8"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
